﻿(function (wtm) {
    function getTreeData(objArray) {
        return $.map(objArray, function (item) {
            return {
                title: item.Text,
                id: item.Value,
                field: item.Text,
                href: item.Url,
                spread: item.Expended,
                checked: item.Selected,
                disabled: item.Disabled,
                children: getTreeData(item.Children)
            };
        });
    }

    wtm.tree_Render = function (para) {

        $.get(para.url, function (resp, state) {
            var treeItems = getTreeData(resp.Data);

            var option = {
                id: para.id,
                elem: '#' + para.id,
                onlyIconControl: para.onlyIconControl,
                showCheckbox: para.showCheckbox,
                showLine: para.showLine,
                data: treeItems,
                click: function (data) {
                    var $el = $(data.elem);

                    //单选模式下，点击一次选中，再次点击取消
                    if (para.showCheckbox == false) {

                        //如果已被选中
                        if ($el.hasClass('layui-this')) {
                            $el.removeClass('layui-this');
                            $el.find('input[name="' + para.fieldName + '"]').remove();

                            //处理required隐藏字段
                            $('#required_' + para.id).val('');
                        }
                        else {
                            //先处理上一次的状态
                            var $tree = $el.closest('.layui-tree');
                            $tree.find('.layui-tree-set.layui-this').removeClass('layui-this');
                            $tree.find('input[name="' + para.fieldName + '"]').remove();

                            //增加新状态      
                            $el.addClass('layui-this');
                            $el.append('<input hidden name="' + para.fieldName + '" value="' + data.data.id + '">');

                            //处理required隐藏字段
                            $('#required_' + para.id).val('hasValue');
                        }
                    }

                    // 多选模式下，点击一次选中，再次点击取消，点击上级选择所有子级
                    // 这里不做过多处理，只是为了扩大点击区域，点击文字也能触发勾选
                    else {
                        var $prev = $el.prev();
                        $prev.click();
                    }

                    // 优先处理用户自定义事件
                    if (para.customClick.length > 0) {
                        eval(para.customClick + "(data);");
                        return;
                    }
                },
                oncheck: function (data) {
                    var $el = $(data.elem);
                    // 一定是在多选模式下
                    if (data.checked) {
                        $el.append('<input hidden name="' + para.fieldName + '" value="' + data.data.id + '">');

                        //处理required隐藏字段
                        $('#required_' + para.id).val('hasValue');
                    }
                    else {
                        $el.find('input[name="' + para.fieldName + '"]').remove();

                        //处理required隐藏字段
                        var checkData = tree.getChecked(para.id);
                        if (checkData.length == 0) {
                            $('#required_' + para.id).val('');
                        }
                    }

                    // 处理用户自定义事件
                    if (para.customCheck.length > 0) {
                        eval(para.customCheck + "(data);");
                    }
                }

            };
            layui.tree.render(option);

            //处理初值
            if (para.value.length > 1) {
                layui.tree.setChecked(para.id, para.value);
            }
            if (para.value.length == 1) {
                var $el = $('#' + para.id).find('.layui-tree-set[data-id="' + para.value[0] + '"]');
                $el.addClass('layui-this');
                $el.append('<input hidden name="' + para.fieldName + '" value="' + para.value[0] + '">');

                //处理required隐藏字段
                $('#required_' + para.id).val('hasValue');
            }

        });




    };
})(wtm);